package com.example.service;

import com.example.common.enums.LevelEnum;
import com.example.common.enums.RoleEnum;
import com.example.entity.Account;
import com.example.entity.Employee;
import com.example.entity.Financial;
import com.example.mapper.EmployeeMapper;
import com.example.mapper.FinancialMapper;
import com.example.utils.TokenUtils;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * 财务支出表业务处理
 **/
@Service
public class FinancialService {

    @Resource
    private FinancialMapper financialMapper;
    @Resource
    private EmployeeMapper employeeMapper;

    /**
     * 新增
     */
    public void add(Financial financial) {
        financialMapper.insert(financial);
    }

    /**
     * 删除
     */
    public void deleteById(Integer id) {
        financialMapper.deleteById(id);
    }

    /**
     * 批量删除
     */
    public void deleteBatch(List<Integer> ids) {
        for (Integer id : ids) {
            financialMapper.deleteById(id);
        }
    }

    /**
     * 修改
     */
    public void updateById(Financial financial) {
        financialMapper.updateById(financial);
    }

    /**
     * 根据ID查询
     */
    public Financial selectById(Integer id) {
        return financialMapper.selectById(id);
    }

    /**
     * 查询所有
     */
    public List<Financial> selectAll(Financial financial) {
        return financialMapper.selectAll(financial);
    }

    /**
     * 分页查询
     */
    // 普通员工不需要看到该模块(财务支出模块)，管理员看到所有部门的支出，部门主管只能看到自己部门的支出
    public PageInfo<Financial> selectPage(Financial financial, Integer pageNum, Integer pageSize) {
        // 获取当前登录的用户信息
        Account currentUser = TokenUtils.getCurrentUser();
        // 判断他是否是员工
        if (RoleEnum.USER.name().equals(currentUser.getRole())) {
            // 需要判断他的身份级别，Account对象是用户的父类，有id属性，但没有level属性，根据id查询拿到用户的所有信息
            Employee employee = employeeMapper.selectById(currentUser.getId());
            // 再次判断他的身份级别，是否是主管
            if (LevelEnum.HEADER.level.equals(employee.getLevel())) {
                // 把部门id作为查询条件传给后台sql语句查询数据库
                financial.setDepartmentId(employee.getDepartmentId());
            } else {
                // 普通员工，不是主管，传给后台sql一个数据库不存在的id，使查询结果为空
                financial.setDepartmentId(0);
            }
        }
        PageHelper.startPage(pageNum, pageSize);
        List<Financial> list = financialMapper.selectAll(financial);
        return PageInfo.of(list);
    }

    public List<Financial> selectAll2() {
        return financialMapper.selectAll2();
    }
}